/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package Cliente.Controller;

import Cliente.Entidade.Cliente;
import Cliente.Entidade.Consulta;
import Cliente.Model.ConsultaPaciente;
import Cliente.Model.PesquisarPaciente;
import Cliente.View.ChecarConsultasView;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Date;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.ListSelectionModel;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;

/**
 *
 * @author Caio
 */
public final class ChecarConsultasPresenter {

    private ChecarConsultasView view;
    private List<Cliente> clientes;
    private List<Consulta> consultas;
    private Cliente cliente;
    private DefaultTableModel PacientetableModel;
    private ListSelectionModel PacientelistModel;
    private DefaultTableModel consultaTableModel;
    private ListSelectionModel consultaListModel;

    public ChecarConsultasView getView() {
        return view;
    }

    public void setView(ChecarConsultasView view) {
        this.view = view;
    }

    public List<Cliente> getClientes() {
        return clientes;
    }

    public void setClientes(List<Cliente> clientes) {
        this.clientes = clientes;
    }

    public Cliente getCliente() {
        return cliente;
    }

    public void setCliente(Cliente cliente) {
        this.cliente = cliente;
    }

    public ChecarConsultasPresenter() {
        view = new ChecarConsultasView();
        this.getView().setVisible(true);
        defineModelo();

        this.getView().getBtnPesquisar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                atualizaTabelaNome();
            }
        });
        view.getBtnFechar().addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                view.dispose();
                try {
                    this.finalize();
                } catch (Throwable ex) {
                    Logger.getLogger(ChecarConsultasPresenter.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        });
        
        
        view.getBtnEncontrar().addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                tabelaAtraso();
            }
        });

    }

    public void tabelaAtraso() {
        ConsultaPaciente busca = new ConsultaPaciente();
        List<Cliente> clientes = busca.datasAtrasadas();
        PacientetableModel = (DefaultTableModel) view.getTblPacientes().getModel();
        int numeroLinhas = PacientetableModel.getRowCount();
        for (int i = 0; i < numeroLinhas; i++) {
            PacientetableModel.removeRow(0);
        }
          for (int i = 0; i < clientes.size(); i++) {           
              PacientetableModel.insertRow(i, new Object[]{clientes.get(i).getNome(), clientes.get(i).getCpf(),pegaUltimaData(clientes.get(i).getNome())});
          }
    }

    public Date pegaUltimaData(String nome) {
        ConsultaPaciente busca = new ConsultaPaciente();
        return busca.encontraUltimaData(nome);
        
    }

    public void atualizaTabelaNome() {
        PesquisarPaciente consultarcliente = new PesquisarPaciente();
        ArrayList<Date> datas = new ArrayList<Date>();
        PacientetableModel = (DefaultTableModel) view.getTblPacientes().getModel();
        if (view.getTxtNome().getText().trim().equals("")) {
            clientes = consultarcliente.listarClientes();
            for (int i = 0; i < clientes.size(); i++) {
                datas.add(pegaUltimaData(clientes.get(i).getNome()));
            }
        } else {
            clientes = consultarcliente.consultaClienteNome(view.getTxtNome().getText().trim());
            for (int i = 0; i < clientes.size(); i++) {
                datas.add(pegaUltimaData(clientes.get(i).getNome()));
            }
        }
        int numeroLinhas = PacientetableModel.getRowCount();
        for (int i = 0; i < numeroLinhas; i++) {
            PacientetableModel.removeRow(0);
        }
        for (int i = 0; i < clientes.size(); i++) {
            if (clientes.get(i).getCongnsultado().equals("Sim")) {
                PacientetableModel.insertRow(i, new Object[]{clientes.get(i).getNome(), clientes.get(i).getCpf(), datas.get(i)});
            } else {
                PacientetableModel.insertRow(i, new Object[]{clientes.get(i).getNome(), clientes.get(i).getCpf(), "Cliente não foi consultado ainda"});
            }

        }
    }

    private void defineModelo() {
        PacientetableModel = (DefaultTableModel) view.getTblPacientes().getModel();
        PacientelistModel = view.getTblPacientes().getSelectionModel();
        consultaListModel = view.getTblConsultas().getSelectionModel();
        PacientelistModel.addListSelectionListener(new ListSelectionListener() {
            @Override
            public void valueChanged(ListSelectionEvent e) {
                if (e.getValueIsAdjusting()) {
                    atualizaTabelaConsultas();
                }
            }
        });
    }

    public void atualizaTabelaConsultas() {
        final ConsultaPaciente busca = new ConsultaPaciente();
        int indice = view.getTblPacientes().getSelectedRow();
        String nome = clientes.get(indice).getNome();
        consultas = busca.checarConsultas(nome);
        consultaTableModel = (DefaultTableModel) view.getTblConsultas().getModel();
        int numeroLinhas = consultaTableModel.getRowCount();
        for (int i = 0; i < numeroLinhas; i++) {
            consultaTableModel.removeRow(0);
        }
        if (consultas.isEmpty()) {
            int i = 0;
            consultaTableModel.insertRow(i, new Object[]{nome, "Sem consultas!", "Sem consultas!", "Sem consultas!", "Sem consultas!"});
        } else {
            for (int i = 0; i < consultas.size(); i++) {
                consultaTableModel.insertRow(i, new Object[]{consultas.get(i).getNome(), consultas.get(i).getRCQ(), consultas.get(i).getIMC(), consultas.get(i).getIAC(), consultas.get(i).getData()});
            }
        }
    }
}
